package unq.ui.carmensandiego

import android.app.Activity
import android.content.Intent
import java.io.Serializable
import org.xtendroid.app.AndroidActivity
import org.xtendroid.app.OnCreate
import retrofit.client.Response
import unq.ui.informacionCaso.Caso
import unq.ui.services.CasoCallBack
import unq.ui.services.CasoService
import unq.ui.services.CasoServiceFactory

@AndroidActivity(R.layout.caso)
abstract class AbstractCasoActivity extends Activity {

	def void setButtonBehaviour(Serializable estado) {
		lugares.onClickListener = [LugaresActivity.iniciarActivity(estado, LugaresActivity.ESTADO_CASO)]
		viajar.onClickListener = [ViajarActivity.iniciarActivity(estado, ViajarActivity.ESTADO_CASO)]
		sospechosos.onClickListener = [SospechososActivity.iniciarActivity(estado, SospechososActivity.ESTADO_CASO)]
	}

	def iniciarActivity(Class<? extends Activity> nuevaAct, Serializable informacion, String key) {
		startActivity(
			new Intent(this, nuevaAct) => [putExtra(key, informacion)]
		)
	}

}

@AndroidActivity(R.layout.caso)
class CasoActivity extends AbstractCasoActivity {

	Caso estadoCaso

	@OnCreate
	def init() {
		val service = new CasoServiceFactory
		service.buildCasoService.obtenerInformacion
	}

	//Extension method para obtener un caso pasandole un servicio.
	def void obtenerInformacion(CasoService service) {
		service.obtenerCaso(
			new CasoCallBack<Caso> {

				override success(Caso caso, Response response) {
					estadoCaso = caso
					estadoCaso.setButtonBehaviour
					paisActual.text = estadoCaso.nombrePais
				}
			})
	}
}

@AndroidActivity(R.layout.caso)
class StartedGameCasoActivity extends AbstractCasoActivity {

	Caso estadoCaso
	public static val ESTADO_CASO = "ESTADO_CASO"

	@OnCreate
	def init() {
		estadoCaso = intent.getSerializableExtra(ESTADO_CASO) as Caso
		paisActual.text = estadoCaso.nombrePais
		estadoCaso.setButtonBehaviour
	}
}
